package com.woohua.thread.product;

/***
 * @title Consumer
 * @description
 * @author woo hua
 * @version 1.0.0
 * @create 2023/3/14 11:39
 **/
public abstract class Consumer<T> implements Runnable {

    private BlockedQueue<T> taskQueue;

    public Consumer(BlockedQueue<T> taskQueue) {
        this.taskQueue = taskQueue;
    }

    @Override
    public void run() {
        while (true) {
            T task = taskQueue.deq();
            exec(task);
        }
    }

    /**
     * 执行任务，使用了“模板方法”设计模式，子类只要实现此方法即可
     * @param task
     */
    public abstract void exec(T task);
}
